/**
 * 
 */
package due.pc.pcshoot.gamelogic;

import org.anddev.andengine.engine.handler.timer.ITimerCallback;
import org.anddev.andengine.engine.handler.timer.TimerHandler;
import org.anddev.andengine.entity.modifier.EntityModifier;
import org.anddev.andengine.entity.scene.Scene;

import android.util.Log;


import due.pc.pcshoot.entity.EnemyState;
import due.pc.pcshoot.entity.IEnemy;

/**
 * @author manhhung.vu
 *
 */
public abstract class BaseEnemyLogicHandler<T extends IEnemy> extends EntityModifier implements IEnemyLogicHandler
{

	//===============================================================/
	//Constants
	//===============================================================/
	
	
	//===============================================================/
	//Fields
	//===============================================================/
	protected T mEnemy;
	protected Scene mScene;
	
	protected float mBallVelocityX, mBallVelocityY, mFiredPointX, mFiredPointY;
	
	//===============================================================/
	//Constructors
	//===============================================================/
	public BaseEnemyLogicHandler(T pEnemy, Scene pScene) 
	{
		mEnemy = pEnemy;
		mScene = pScene;
	
		mScene.registerUpdateHandler(
				new TimerHandler(
						mEnemy.getAppearTime(), 
						new ITimerCallback() {
							@Override
							public void onTimePassed(TimerHandler pTimerHandler) {
								if (mEnemy.getState().equals(EnemyState.READY))
								{
									mScene.attachChild(mEnemy);
									mEnemy.setVisible(true);
									mEnemy.setState(EnemyState.ACTIVE);
									
//									Log.d("TimerHandler", "appear time");
								}
							}
						}));
		
		mEnemy.registerEntityModifier(this);
		mEnemy.setLogicHandler(this);
	}
	
	//===============================================================/
	//Inherited Methods
	//===============================================================/
	@Override
	public EntityModifier clone()
			throws org.anddev.andengine.util.modifier.IModifier.CloneNotSupportedException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public float getDuration() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public float getSecondsElapsed() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void reset() {
		// TODO Auto-generated method stub
		
	}
	
	@Override
	public void applyFiredInfo(float pBallVelocityX, float pBallVelocityY,
			float pCollisionPointX, float pCollisionPointY) 
	{
		mBallVelocityX = pBallVelocityX;
		mBallVelocityY = pBallVelocityY;
		mFiredPointX = pCollisionPointX;
		mFiredPointY = pCollisionPointY;
	}
	
	//===============================================================/
	//Methods
	//===============================================================/
	
	
	//===============================================================/
	//Getters & Setters
	//===============================================================/
	
	
	//===============================================================/
	//Static Methods
	//===============================================================/
	
	
	//===============================================================/
	//Inner Classes
	//===============================================================/
}
